#define xuser mixc::powerful_cat
#include"lang/cxx/length_if_item_as.hpp"
#include"lang/cxx.hpp"
#include"mixc.hpp"
#include"utils/counter.hpp"

xinit(xuser::the_main){
    using namespace xuser;

    // 演示：假如将字符串元素转换成其他字符类型的串，会有多少个字符单位
    {
        c08 str = "MeMeCat";
        
        // c08 本身字符就是 char 类型，所以长度不变
        xhint(str, str.length_if_item_as<char>(), str->length);

        // 不变，因为都是 ascii 字符，所有字符都只占 1 个字节
        xhint(str, str.length_if_item_as<char16_t>(), str->length);
        
        // 转成 char，即使是包含 unicode 字符
        str = "MeMeCat猫";
        xhint(str, str.length_if_item_as<char>(), str->length);

        // 包含 unicode 字符 '猫'，char16_t 所有字符都是两个字节，char utf-8 字符中文是 3 个字节
        // 所以 str.length_if_item_as<char16_t>() = 8
        xhint(str, str.length_if_item_as<char16_t>(), str->length);
    }

    // 演示：假如将字符串元素转换成其他字符类型的串，会有多少个字符单位，char16_t 版本
    {
        c16 str = u"MeMeCat";
        
        // c16 本身字符就是 char16_t 类型，所以长度不变
        xhint(str.length_if_item_as<char16_t>(), str->length);

        // 不变，因为都是 ascii 字符，所有字符都只需要 1 个字节，但 c16 用 2 个字节存储一个字符
        xhint(str.length_if_item_as<char>(), str->length);

        // 转成 char16_t，即使是包含 unicode 字符
        str = u"MeMeCat猫";
        //      1234567
        xhint(str.length_if_item_as<char16_t>(), str->length);

        // 包含 unicode 字符 '猫'，char16_t 所有字符都是两个字节，char utf-8 字符中文是 3 个字节
        // 所以 str.length_if_item_as<char>() = 10
        xhint(str.length_if_item_as<char>(), str->length);
    }
};
